import pandas as pd
import numpy as np
from tabulate import tabulate
from datetime import datetime

# 1. 数据读取
data = pd.read_excel('朝阳医院2018年销售数据.xlsx', names=['购药时间', '社保卡号', '商品编码', '商品名称', '销售数量', '应收金额', '实收金额'])

# 2. 数据清洗
# 处理空值
data = data.replace(['', ' ', np.nan], 'Null')

# 转换日期格式，指定日期格式
data['购药时间'] = pd.to_datetime(data['购药时间'], errors='coerce', format='%Y-%m-%d')
# 转换数值类型
numeric_cols = ['销售数量', '应收金额', '实收金额']
for col in numeric_cols:
    data[col] = pd.to_numeric(data[col], errors='coerce')

# 3. 打印清洗后的数据
print("=== 清洗后的数据 ===")
print(data)
print("\n=== 数据概览 ===")
print(data.info())
print("\n=== 描述性统计 ===")
print(data.describe())

# 4. 数据分析
# 计算折扣率
data['折扣率'] = data['实收金额'] / data['应收金额']
# 按商品统计
product_stats = data.groupby('商品名称').agg({
    '销售数量': 'sum',
    '应收金额': 'sum',
    '实收金额': 'sum',
    '折扣率': 'mean'
})

# 5. 输出分析结果
print("\n=== 商品销售统计 ===")
print(tabulate(product_stats, headers='keys', tablefmt='grid'))

print("\n=== 销售数量TOP10商品 ===")
top10 = data['商品名称'].value_counts().head(10)
print(tabulate(top10.reset_index(), headers=['商品名称', '销售数量'], tablefmt='grid'))

print("\n=== 应收金额分布 ===")
print(tabulate(data['应收金额'].describe().to_frame().T, headers='keys', tablefmt='grid'))

print("\n=== 折扣率统计 ===")
print(tabulate(data['折扣率'].describe().to_frame().T, headers='keys', tablefmt='grid'))


# 6. 将分析结果写入Excel
output_file = f'朝阳医院数据分析结果_{datetime.now().strftime("%Y%m%d_%H%M%S")}.xlsx'
with pd.ExcelWriter(output_file) as writer:
    # 写入原始数据
    data.to_excel(writer, sheet_name='原始数据', index=False)
    
    # 写入商品销售统计
    product_stats.to_excel(writer, sheet_name='商品销售统计')
    
    # 写入销售数量TOP10
    top10.to_excel(writer, sheet_name='销售TOP10')
    
    # 写入应收金额分布
    data['应收金额'].describe().to_frame().T.to_excel(writer, sheet_name='应收金额分布')
    
    # 写入折扣率统计
    data['折扣率'].describe().to_frame().T.to_excel(writer, sheet_name='折扣率统计')

print(f"\n=== 分析结果已保存到: {output_file} ===")
